home *** CD-ROM | disk | FTP | other *** search
/ Floppyshop 2 / Floppyshop - 2.zip / Floppyshop - 2.iso / diskmags / 0022-3.564 / dmg-0122 / technica.l / ttns.doc < prev   
Text File  |  1997-04-16  |  16KB  |  368 lines

  1.                        2. TTNS file coding
  2.  
  3.      Transmission  of character data in the TTNS network has  some 
  4.      limitations. Specifically, the TTNS network can only handle 7 
  5.      bit  characters.  Furthermore,  only a subset of the standard 
  6.      ASCII set can be sued for transparent character transmission.
  7.  
  8.      Transmission  of  8 bit characters as used in  binary  source 
  9.      code programs requires a form of encoding for converting each 
  10.      8 bit character into a sequence of 7 bit characters. Encoding 
  11.      is also required for the transmission of text and source code 
  12.      programs with embedded "control characters".
  13.  
  14.      Because  of line noise and other factors,  files also have to 
  15.      be  transmitted with some form of error protection.  Sets  of 
  16.      characters  are organised in blocks which are transmitted  as 
  17.      an  entity.  Each block is appended with a checksum sequence. 
  18.      The  receiver  checks the validity of every block  and  flags 
  19.      those  which were received in error.  A file received with an 
  20.      error  count  of  zero  is  assumed  to  have  been  received 
  21.      correctly.
  22.  
  23.      TTNS uses a simple form of encoding, structured as follows:
  24.  
  25.           1. Character encoding: mapping 8 bit bytes into multiple 
  26.           sequences of 7 bit "valid" ASCII haracters.
  27.  
  28.           2.  Block  encoding:  framing  of sequences (of  already 
  29.           encoded   7   bit  character  sequences)   into   blocks 
  30.           surrounded by header and checksum information.
  31.  
  32.           3.  File transmission: transmission and acknowledging of 
  33.           sequences of data blocks.
  34.  
  35.      The  levels are independant and form a subset of each  other. 
  36.      Files can be transmitted in character encoded form only or in 
  37.      block form with or without checksums.
  38.  
  39.      The  format  has  been  developed  for  line  oriented  ASCII 
  40.      networks  and  hosts.  Files can be uploaded  and  downloaded 
  41.      'blind'  from  the host,  or can be uploaded  and  downloaded 
  42.      using  file transfer programs with acknowledge of blocks  and 
  43.      retransmission  requests.  Files  can  also be sent  as  mail 
  44.      items,  the  integrity of the data will remain intact even if 
  45.      the  host  (or  network)  adds extra  lines  of  text,  extra 
  46.      messages or reformats the transmitted data (e.g.  sections of 
  47.      text such as "--more--' in mail items).
  48.  
  49. Character encoding, decoding
  50.  
  51.      The   character   encoding-decoding  procedure   allows   for 
  52.      transport  transmission  of 8-bit characters  throughout  the 
  53.      network. Its main features are:-
  54.  
  55.           1. A very simple decoding algorithm.
  56.  
  57.           2.  Transparency and compatability with text files, i.e. 
  58.           encoded  text files can be read by equipment  without  a 
  59.           decoder.
  60.  
  61.           3.  One-to-many  encoding format, every 8-bit byte can be 
  62.           encoded   into   more  than  one   character   sequence, 
  63.           characters  with  special  meanings can  be  avoided  or 
  64.           transmitted by sending an alternative coded sequence  of 
  65.           characters.
  66.  
  67.  
  68.      The encoding procedure is straightforward; bytes which cannot 
  69.      be sent to the line directly, because they have bit 7 set for 
  70.      example, are converted to a sequence of 'valid transmittable' 
  71.      characters.  The  actual  sequence  consists of one  or  more 
  72.      'escape'   characters   followed   by   the   original   byte 
  73.      'transformed' by the inversion of one or more of bits 5, 6 or 
  74.      7  in  its  pattern.  The inversion converts the  byte  to  a 
  75.      character in the 'valid' ASCII range.
  76.  
  77.      There  are four special escape characters,  each of which  is 
  78.      used  to set up a bit pattern in a flag.  The purpose of  the 
  79.      flag is to invert (exclusive or) the bit pattern of the  next 
  80.      byte.  The 'escape' character inverts bits 5, 6 and 7 (in any 
  81.      combination) of the original byte and precedes it.  An escape 
  82.      character  can follow another,  in which case conversion will 
  83.      be  performed on the exclusive-or combination ofthe  two  (or 
  84.      more) escape characters in the sequence.
  85.  
  86.      The  encoding overhead is,  on average,  1.6 to 1 (defined as 
  87.      the ratio of output characters over input bytes),  it will be 
  88.      less  for files which contain a lot of text  information,  as 
  89.      text characters are generally in 7-bit byte form.
  90.  
  91.      The  'escape' characters themselves are transmitted  as  dual 
  92.      character sequences.
  93.  
  94.  
  95. Character Decoding Procedure
  96.  
  97.      The decoding procedure is very simple and is the same for all 
  98.      methods  of  encoding.  The  program keeps a  local  variable 
  99.      'flag' which on initialisation is set to zero,  as characters 
  100.      arrive  they are tested to see if they belong to the  set  of 
  101.      escape  characters,  if  they  do,  bits of the flag are  set 
  102.      accordingly.  The  next received character is  exclusive-or'd 
  103.      with the flag, which is then reset to zero. In pseudo-program 
  104.      form a procedure which takes as input character encoded data, 
  105.      and saves to disc the recovered 8-bit bytes...
  106.  
  107.           DECODE (input CHAR,     local FLAG (initialise to zero))
  108.           if (CHAR=x'7B') then FLAG = FLAG xor x'80';
  109.           if (CHAR=x'7C') then FLAG = FLAG xor x'40';
  110.           if (CHAR=x'7D') then FLAG = FLAG xor x'A0';
  111.           if (CHAR not in [x'7B' .. x'7E']) then
  112.                CHAR = CHAR xor FLAG
  113.                write_to_file (CHAR)
  114.                FLAG = 0;
  115.           end;
  116.  
  117.      In  other words,  all received characters are passed straight 
  118.      through  until one of the four special escape  characters  is 
  119.      received.  The received escape character modifies an internal 
  120.      flag  and is not saved to disc.  The next received non-escape 
  121.      character is exclusive-or'd with the internal flag and  saved 
  122.      to  disc;  the  flag being cleared afterwards.  More than one 
  123.      escape  character  can be received in a  sequence,  each  one 
  124.      modifying  the flag accordingly until a non-escape  character 
  125.      arrives.
  126.  
  127.      
  128.      Character Encoding Procedure
  129.      
  130.      Bytes  can be encoded in more than one way (on  decoding  all 
  131.      methods  will produce the same results).  The only basic rule 
  132.      is  that  the encoding process must not allow  any  'illegal' 
  133.      characters to be sent.
  134.  
  135.      The basic encoding procedure is as follows:-
  136.  
  137.      If  the  byte is in the 'valid range' then  transmit  without 
  138.      modification, otherwise transmit an escape character followed 
  139.      by  the byte modified (by exclusive-or'ing one of the  bits), 
  140.      so  that  it  is  in the  valid  range.  The  encoding  table 
  141.      (including alternatives) is as follows:-
  142.  
  143.      Input byte   Standard encoded output + some alternatives
  144.         range
  145.  
  146.      00 - 1F      <7E><20-3F> or <7C><40-5F> or <7C><7E><60-7B>
  147.      20 - 3F      <20-3F>     or <7C><60-7B> or <7C><7E><40-5F>
  148.      40 - 5F      <40-5F>     or <7E><60-7B> or <7C><7E><20-3F>
  149.      60 - 7A      <60-7A>     or <7C><20-3F> or <7E><40-5F>
  150.      7B - 7F      <7C><3B-3F> or <7E><5B-5F>
  151.      80 - 9F      <7D><20-3F> or <7B><7C><40-5F>
  152.      A0 - BF      <7B><20-3F> or <7C><7D><40-5F>
  153.      C0 - DF      <7B><40-5F> or <7D><60-7B> or <7C><7D><20-3F>
  154.      E0 - FF      <7D><40-5F> or <7B><60-7B> or <7B><7C><20-3F>
  155.  
  156.      The  program  to  read an 8-bit byte  from  disc  and  return 
  157.      converted  characters  is  as  follows.   Note...The  program 
  158.      requires  a local storage flag plus a one  character  storage 
  159.      location. Initialisation requires the flag to be set to zero.
  160.  
  161.  
  162.      ENCODE (output CHAR; local FLAG, CHOLD (initialise to zero))
  163.           if (FLAG <> 0) then
  164.                CHAR = CHOLD xor FLAG;
  165.                FLAG = 0;
  166.           else
  167.                read-byte-from-file into CHOLD
  168.                if (CHOLD in [x'00' .. x'1F']) then 
  169.                     FLAG = x'40';
  170.                     CHAR = x'7C';
  171.                if (CHOLD in [x'20' .. x'7A']) then
  172.                     FLAG = x'00';
  173.                     CHAR = CHOLD;
  174.                if (CHOLD in [x'7B' .. x'7F']) then
  175.                     FLAG = x'40';
  176.                     CHAR = x'7C';
  177.                if (CHOLD in [x'80' .. x'9F']) then
  178.                     FLAG = x'A0';
  179.                     CHAR = x'7D';
  180.                if (CHOLD in [x'A0' .. x'DF']) then
  181.                     FLAG = x'80';
  182.                     CHAR = x'7B';
  183.                if (CHOLD in [x'E0' .. x'FF']) then
  184.                     FLAG = x'A0';
  185.                     CHAR = x'7D';
  186.      end;
  187.  
  188.  
  189.      
  190.           
  191.      It  is  possible to encode an 8-bit byte into more  than  one 
  192.      different  combination of output characters.  The encoder has 
  193.      therefore more than one encoding choice for every  particular 
  194.      character,   this  is  used  to  avoid  the  transmission  of 
  195.      'unwelcome'  characters,  such  as 'commercial at',  which is 
  196.      used  as  a  line delete command  in  Dialcom  software.  For 
  197.      example,  the byte <00> would normally be encoded as <7C><40> 
  198.      which  includes  the  '@' sign;  the program above  would  be 
  199.      modified to encode <00> to <7E><20> instead.
  200.  
  201. Block Encoding Decoding
  202.  
  203.      For  the  downloading  of files,  character encoded  data  is 
  204.      divided into variable length records and is then  'bracketed' 
  205.      by  block separators.  The purpose of the blocks is to divide 
  206.      the data into lengths shorter than the defined line length of 
  207.      the host or network. Blocks also allowfor the interleaving of 
  208.      data  which  is not part of the file but may be  required  by 
  209.      other  parts  of the system or  network,  including  carriage 
  210.      return, line feed and other formatting characters.
  211.  
  212.      Blocks are formatted as follows:-
  213.  
  214.      <sq><7B><7B> ...encoded data... <7D><7D><ck><ck>
  215.  
  216.      Data  outside the blocks is not considered part of  the  file 
  217.      and  is  ignored  (this data will  usually  contain  carriage 
  218.      returns etc.  for formatting purposes). The block is preceded 
  219.      by  an optional sequence character.  Two checksum  characters 
  220.      can  optionally follow the block.  Simple decoders can ignore 
  221.      the  sequence character and the checksums (they  are  outside 
  222.      the block).
  223.  
  224.      The  (optional) sequence character is a single digit  (0..7), 
  225.      x'30'  to x'37'.  A block is transmitted with character  '0', 
  226.      the next with '1' etc. After 7, the next block continues with 
  227.      '0'  and  so  on.  The purpose of sequence characters  is  to 
  228.      ensure that blocks are received in the correct order.  Simple 
  229.      decoders  can ignore the sequence  character  (aletrnatively, 
  230.      they  could  perform a simple test on the  least  significant 
  231.      bit). If the receiver does not recognise a consistant ordered 
  232.      sequence,  it  assumes  that the blocks were not preceded  by 
  233.      sequence characters and will ignore the check.  Again this is 
  234.      to allow for simple encoder-decoder operation.
  235.  
  236.      The checksum pair is two hex digits <00..FF> corresponding to 
  237.      the  xor  total of all the bytes between  the  brackets.  The 
  238.      decoder  has  the option of calculating checksums  for  every 
  239.      block  (and  reporting errors to the user)  or  ignoring  the 
  240.      checksums altogether.  If the checksum is not appended to the 
  241.      block,  the receiver will recognise the fact and perform only 
  242.      a  simple  parity  check;  simple transmitters can  send  the 
  243.      checksum   <00>  for  all  blocks.   This  allows  for   full 
  244.      flexibility  in checksum protection.  The checksum is easy to 
  245.      calculate by the decoder.
  246.  
  247.      Error  situations expected on the network can be one  of  the 
  248.      following:  single or multiple error bits in a block (random 
  249.      noise),  burst errors causing whole sections of blocks not to 
  250.      be received, delay conditions where blocks arrive late, or do 
  251.      not arrive at all, and complete loss of transmission.
  252.  
  253.      Overall  error protection in this scheme is provided  by  the 
  254.      fact that all characters are transmitted in 7-bit even parity 
  255.      form.  The  decoder  provides a check on both horizontal  and 
  256.      vertical checksums. Loss of block sequencing is also detected 
  257.      by means of the sequencing digit.
  258.  
  259.  
  260.      This overall error protecting scheme provides a substantially 
  261.      reliable  form for data protection,  even for simple decoders 
  262.      ignoring the horizontal checksum.
  263.  
  264.      When the whole file has been received, the decoder closes the 
  265.      local disc file and notifies the user of the total number  of 
  266.      errors received. For 'blind' transmission, the user will then 
  267.      request  for the whole file to be transmitted again from  the 
  268.      host.
  269.  
  270. Data Header Block
  271.  
  272.      The header block is as follows:
  273.  
  274.      <sq><7C><7C>..header information..<7D><7D><ck><ck>
  275.  
  276.      Note,  <sq>  can be character '7' (x'37') to force the  first 
  277.      data  block  to  have a sequence character  of  zero.  Simple 
  278.      decoders can ignore the header block altogether.
  279.  
  280.      The end of file block is as follows:
  281.  
  282.      <sq><7B><7B><7E><7E>      The  disc  file  is   automatically 
  283.                                closed.
  284.  
  285.      For example ...
  286.  
  287.      7||FREDF.COM   aug 13 L1800,R1200}}31
  288.      0{{this is a line of text|M|J this is the next line|M|J}}43
  289.      1{{and another line|M|J}}12
  290.      2{{this is the last line|M|J}}91
  291.      3{{~~}}
  292.  
  293.  
  294.      A simple block decode procedure is as follows:
  295.  
  296.      1.   ignore  all  received characters until '{{' or  '||'  is 
  297.           received.
  298.      2.   reset all flags etc.
  299.      3.   if  data  pass all received data  to  character  decoder 
  300.           procedure.
  301.      4.   if header, set local header information.
  302.      5.   if '}}' is received, read checksum (optional) and goto 1 
  303.           above.
  304.      6.   if '~~' is received, close the file and end.
  305.  
  306.      A simplified block encode procedure is as follows:
  307.  
  308.      1.   set n=7.
  309.      2.   Transmit header block i.e. 'n||MBBC}}12'.
  310.      3.   increment n mod 7.
  311.      4.   transmit 'n{{'.
  312.      5.   transmit  character encoded data until say 80  bytes  or 
  313.           EOL.
  314.      6.   transmit  '}}' plus two or four checksum characters  (if 
  315.           required).
  316.      7.   transmit interblock data as required (comments,  CR-LF's 
  317.           etc.
  318.      8.   repeat from 3 above.
  319.      9.   at end of file transmit 'n{{~~'.
  320.  
  321.      Header information:
  322.  
  323.      A typical header..
  324.  
  325.           7||MBBC,FGAME.BAS,L1E00,R8023}}C3
  326.  
  327.      The fields start with a single character and are separated by 
  328.      commas (all fields are optional). The fields are:
  329.  
  330.  
  331.           Mnnn      Machine type (i.e. MBBC, MRML, MACT, MIBM etc)
  332.           Fnnnn     Filename
  333.           Lnnnn     Load address in hex (any length)
  334.           Rnnnn     Run address in hex (any length)
  335.           Cxxxxx    Comment line
  336.  
  337.  
  338.  
  339.                    3. TTNS format control codes
  340.  
  341.  
  342.      This option allows characters embedded in the source text  to 
  343.      control  facilities  at  the terminal  end  such  as  printer 
  344.      control, file control and screen pauses.
  345.  
  346.      This facility has a number of applications:
  347.  
  348.      -    Automatic software downloading .. avoids the user having 
  349.           to type out the complex sequences presently requireed.
  350.  
  351.      -    Automatic control of printer. Downloaded information can 
  352.           be  selective  in the way it  presents  information  for 
  353.           display and for remote printing.
  354.  
  355.      -    Screen  pauses allow the user to control the stop  point 
  356.           of  his  document,  the  users  can  continue  input  by 
  357.           pressing any key.
  358.  
  359.  
  360.  
  361.  
  362.  
  363.  
  364.  
  365.                      That appears to be that!
  366.  
  367.  
  368.